package cbm.seguridad.controller;

import java.sql.Date;
import java.sql.SQLException;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;

import cbm.commons.BaseController;
import cbm.commons.ConstantsWeb;
import cbm.commons.RequestHelper;
import cbm.commons.ResultadoOperacionBean;
import cbm.commons.SessionContainer;
import ejb.cbm.commons.FormatoFecha;
import ejb.cbm.commons.StackTrace2String;
import ejb.cbm.seguridad.bean.PerfilBean;
import ejb.cbm.seguridad.bean.RegistroIngresoBean;
import ejb.cbm.seguridad.bean.UsuarioBean;
import ejb.cbm.seguridad.local.RegistroIngresoFacadeLocal;

public class ConfirmacionIngresoController extends BaseController{
	
	public RegistroIngresoFacadeLocal registroIngresoFacadeLocal;

	public ModelAndView buscar(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = "seguridad/ConfirmarIngresoTabla.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ResultadoOperacionBean.EXITO,ResultadoOperacionBean.TITULO_EXITO,ResultadoOperacionBean.MSGEXITO);
		List<RegistroIngresoBean> listResultado = null;
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		RegistroIngresoBean registroIngreso = (RegistroIngresoBean)sessionContainer.getSessionElement(ConstantsWeb.REGISTRO_INGRESO);
		RegistroIngresoBean filtro = new RegistroIngresoBean();
		Context context = null;
		
		try{
			
			getFiltro(request, filtro);
			context = new InitialContext();
			registroIngresoFacadeLocal=(RegistroIngresoFacadeLocal)context.lookup("CBM/RegistroIngresoFacade/local");
			try {
				
				listResultado = registroIngresoFacadeLocal.busquedaRestringuida(filtro,
								registroIngreso.getUsuarioBean().getCodigousuario(),
								registroIngreso.getUsuarioBean().getCodigooficina(),
								registroIngreso.getUsuarioBean().getPerfilBean().getTipoperfil().toString()
								);
				
				if(listResultado.size()==0)listResultado = null;
			} catch (SQLException e) {
				e.printStackTrace();
				paginaSig = resources.getString("pagina_error");
				resultado.setResultado(ConstantsWeb.ERROR);
				resultado.setTitulo("Error");
				resultado.setMensaje("RuntimeException");
				resultado.setTrace(StackTrace2String.stackTraceToString(e));
			}

		}catch(RuntimeException e){
			e.printStackTrace();
			paginaSig = resources.getString("pagina_error");
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("RuntimeException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			paginaSig = resources.getString("pagina_error");
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("NamingException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		
		sessionContainer.addTemporal(ConstantsWeb.GRILLA, listResultado);
		return new ModelAndView(paginaSig);
	}

	public void getFiltro(HttpServletRequest request, RegistroIngresoBean filtro) {
		Long numeroRegistro = RequestHelper.getParameterLong(request, "txtNumeroRegistro");
		String apellidoPaterno = RequestHelper.getParameterString(request, "txtApellidoPaterno");
		String apellidoMaterno = RequestHelper.getParameterString(request, "txtApellidoMaterno");
		String nombre = RequestHelper.getParameterString(request, "txtNombre");
		String terminal = RequestHelper.getParameterString(request, "txtTerminal");
		String puesto = RequestHelper.getParameterString(request, "selPuesto");
		Long estado = RequestHelper.getParameterLong(request, "selEstado");
		String oficina = RequestHelper.getParameterString(request, "selOficina");
		String fecha = FormatoFecha.dateUtilToStringDDMMYYYY(new Date(System.currentTimeMillis()));
		
		filtro.setNumeroregistro(numeroRegistro);
		filtro.setUsuarioBean(new UsuarioBean());
		filtro.getUsuarioBean().setApellidopaterno(apellidoPaterno);
		filtro.getUsuarioBean().setApellidomaterno(apellidoMaterno);
		filtro.getUsuarioBean().setNombre(nombre);
		filtro.getUsuarioBean().setPerfilBean(new PerfilBean());
		filtro.getUsuarioBean().setCodigoPuesto(puesto);
		filtro.setCodigoterminal(terminal);
		filtro.setFlagestado(estado);
		filtro.setCodigooficina(oficina);
		filtro.setFecha(fecha);
	}

	public ModelAndView confirmarIngreso(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		String paginaSig = "seguridad/ConfirmarIngresoTabla.jsp";
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		RegistroIngresoBean registroIngreso = (RegistroIngresoBean)sessionContainer.getSessionElement(ConstantsWeb.REGISTRO_INGRESO);
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		RegistroIngresoBean registroIngresoBean = new RegistroIngresoBean();
		RegistroIngresoBean filtro = new RegistroIngresoBean();
		List<RegistroIngresoBean> listResultado = null;
		Context context = null;
		
		try{
			Long numeroRegistro = RequestHelper.getParameterLong(request,"hdnnumeroregistro");
			Long numeroFlagEstado = RequestHelper.getParameterLong(request,"hdnflagestado");
			getFiltro(request, filtro);
			registroIngresoBean.setNumeroregistro(numeroRegistro);
			if (numeroFlagEstado.equals(new Long(ConstantsWeb.CONFIRMADO)))
				registroIngresoBean.setFlagestado(new Long(ConstantsWeb.SINCONFIRMAR));
			else
				registroIngresoBean.setFlagestado(new Long(ConstantsWeb.CONFIRMADO));
			
			context = new InitialContext();
			registroIngresoFacadeLocal=(RegistroIngresoFacadeLocal)context.lookup("CBM/RegistroIngresoFacade/local");
			registroIngresoFacadeLocal.save(registroIngresoBean,usuarioLogeado);
			

		}catch(RuntimeException e){
			paginaSig = resources.getString("pagina_error");
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("Error en tiempo de ejecucion");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			paginaSig = resources.getString("pagina_error");
			resultado.setTitulo("Error");
			resultado.setMensaje("NamingException");
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		
		
		
		try {
			listResultado = registroIngresoFacadeLocal.busquedaRestringuida(filtro,
								registroIngreso.getUsuarioBean().getCodigousuario(),
								registroIngreso.getUsuarioBean().getCodigooficina(),
								registroIngreso.getUsuarioBean().getPerfilBean().getTipoperfil().toString()
							);
			
			if(listResultado.size()==0)listResultado = null;
		} catch (SQLException e) {
			paginaSig = resources.getString("pagina_error");
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error");
			resultado.setMensaje("Error en tiempo de ejecucion");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		
		sessionContainer.addTemporal(ConstantsWeb.GRILLA, listResultado);
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		
		return new ModelAndView(paginaSig);
	}

	public ModelAndView open(HttpServletRequest request, HttpServletResponse response){
		String paginaSig = resources.getString("confirmacion_ingreso");
		return new ModelAndView(paginaSig);
	}
}